home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / mail / hotmail / ajax.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  47KB  |  1,207 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import logging
  5. import digsbysite
  6. import common.asynchttp as asynchttp
  7. import re
  8. import util
  9. log = logging.getLogger('hotmail.ajax')
  10.  
  11. def FlagsCreate(*args):
  12.     return util.Storage(zip(args[::2], args[1::2]))
  13.  
  14. XMLPost = 0
  15. null = None
  16.  
  17. class FppParamType(object):
  18.     String = ('_string',)
  19.     Date = ('_date',)
  20.     Array = ('_array',)
  21.     oArray = ('_oArray',)
  22.     Primitive = ('_primitive',)
  23.     Object = ('_object',)
  24.     Enum = ('_enum',)
  25.     Custom = '_custom'
  26.  
  27.  
  28. class TypeSystem(object):
  29.     _isFppObject = True
  30.     
  31.     def __init__(self, name_or_type, name = None, val = None):
  32.         if name is not None:
  33.             type = name_or_type
  34.             name = name
  35.         else:
  36.             type = FppParamType.Custom
  37.             name = name_or_type
  38.         self.name = name
  39.         self.type = type
  40.         self.value = val
  41.  
  42.     
  43.     def escape(instance):
  44.         f = {
  45.             '_string': FppProxy.escape,
  46.             '_date': (lambda a: a),
  47.             '_array': FppProxy.arrayToString,
  48.             '_oArray': FppProxy.objToStringImpl,
  49.             '_object': FppProxy.objToStringImpl,
  50.             '_primitive': (lambda a: str(a).lower()),
  51.             '_enum': (lambda a: str(a)) }.get(util.get(instance, 'type', None), FppProxy.objToString)
  52.         escaped_val = f(util.get(instance, 'value', None))
  53.         if escaped_val is None:
  54.             return 'null'
  55.         
  56.         return escaped_val
  57.  
  58.     escape = staticmethod(escape)
  59.     
  60.     def __str__(self):
  61.         return '<TypeSystem %r>' % self.name
  62.  
  63.     
  64.     def toString(self):
  65.         return TypeSystem.escape(self)
  66.  
  67.     
  68.     def default(cls):
  69.         x = cls('')
  70.         x.value = type(cls._default)(cls._default)
  71.         return x
  72.  
  73.     default = classmethod(default)
  74.  
  75.  
  76. class _string(TypeSystem):
  77.     _default = ''
  78.     
  79.     def __init__(self, name):
  80.         TypeSystem.__init__(self, '_string', name)
  81.  
  82.  
  83.  
  84. class _array(TypeSystem):
  85.     _default = []
  86.     
  87.     def __init__(self, name):
  88.         TypeSystem.__init__(self, '_array', name)
  89.  
  90.  
  91.  
  92. class _enum(TypeSystem):
  93.     _default = 0
  94.     
  95.     def __init__(self, name):
  96.         TypeSystem.__init__(self, '_enum', name)
  97.  
  98.  
  99.  
  100. class _primitive(TypeSystem):
  101.     _default = False
  102.     
  103.     def __init__(self, name):
  104.         TypeSystem.__init__(self, '_primitive', name)
  105.  
  106.  
  107.  
  108. class _oArray(TypeSystem):
  109.     _default = { }
  110.     
  111.     def __init__(self, name):
  112.         TypeSystem.__init__(self, '_oArray', name)
  113.  
  114.  
  115.  
  116. class _object(TypeSystem):
  117.     _default = { }
  118.     
  119.     def __init__(self, name):
  120.         TypeSystem.__init__(self, '_object', name)
  121.  
  122.  
  123. _custom = TypeSystem
  124.  
  125. class FppMetaclass(type):
  126.     _classes = {
  127.         '_enum': _enum,
  128.         '_string': _string,
  129.         '_array': _array,
  130.         '_primitive': _primitive,
  131.         '_object': _object,
  132.         '_oArray': _oArray }
  133.     
  134.     def __init__(cls, name, bases, dict):
  135.         for _name, typ in cls._fields_:
  136.             
  137.             def getter(self, _name = _name, typ = (typ,)):
  138.                 if not hasattr(self, '_field_%s' % name):
  139.                     setattr(self, '_field_%s' % name, FppMetaclass._classes[typ].default())
  140.                 
  141.                 val = getattr(self, '_field_%s' % _name)
  142.                 if getattr(val, 'type', None) != typ:
  143.                     if val is None or val._isFppObject:
  144.                         return val
  145.                     
  146.                     raise ValueError('%r has an invalid %r (with type = %r, value = %r)', self, _name, val.type, val.value)
  147.                 
  148.                 return val
  149.  
  150.             
  151.             def setter(self, val, _name = _name, typ = typ):
  152.                 if val is not None and hasattr(val, 'type'):
  153.                     if val.type != typ:
  154.                         raise TypeError('%r must have type %r for the %r field. Got %r (value = %r) instead.', self, typ, _name, val.type, val.value)
  155.                     
  156.                 elif val is None or getattr(val, '_isFppObject', False):
  157.                     pass
  158.                 else:
  159.                     x = FppMetaclass._classes[typ].default()
  160.                     x.value = val
  161.                     val = x
  162.                 setattr(self, '_field_%s' % _name, val)
  163.  
  164.             setattr(cls, _name, property(getter, setter))
  165.             del getter
  166.             del setter
  167.         
  168.         
  169.         def default(_cls):
  170.             i = cls()
  171.             for _name, typ in i._fields_:
  172.                 setattr(i, _name, FppMetaclass._classes[typ].default())
  173.             
  174.             return i
  175.  
  176.         default = (classmethod,)(default)
  177.         dict['default'] = default
  178.         FppMetaclass._classes[name] = cls
  179.         cls.default = default
  180.         cls._isFppObject = True
  181.         type.__init__(cls, name, bases, dict)
  182.  
  183.  
  184.  
  185. class FppClass(object):
  186.     _fields_ = []
  187.     __metaclass__ = FppMetaclass
  188.     
  189.     def __init__(self, *args, **kwds):
  190.         fieldnames = (lambda .0: for x in .0:
  191. x[0])(self._fields_)
  192.         for i in range(len(args)):
  193.             setattr(self, self._fields_[i][0], args[i])
  194.         
  195.         for key in kwds:
  196.             setattr(self, key, kwds[key])
  197.         
  198.  
  199.     
  200.     def __str__(self):
  201.         res = [
  202.             '{']
  203.         for name, typ in self._fields_:
  204.             cls = FppMetaclass._classes[typ]
  205.             val = getattr(self, name)
  206.             if val is None:
  207.                 res.append('null')
  208.             else:
  209.                 res.append(cls.escape(val))
  210.             res.append(',')
  211.         
  212.         if res[-1] == ',':
  213.             res.pop(-1)
  214.         
  215.         res.append('}')
  216.         return ''.join(res)
  217.  
  218.     toString = escape = __str__
  219.     
  220.     def __repr__(self):
  221.         return '<%s %s>' % (type(self).__name__, (' '.join,)((lambda .0: for entry in .0:
  222. '%s=%r' % (entry[0], getattr(self, entry[0], None)))(self._fields_)))
  223.  
  224.  
  225.  
  226. class FppError(FppClass):
  227.     _fields_ = [
  228.         ('ErrorCode', '_string'),
  229.         ('Message', '_string'),
  230.         ('ErrorObj', '_object'),
  231.         ('StackTrace', '_string')]
  232.  
  233.  
  234. class FppReturnPackage(FppClass):
  235.     _fields_ = [
  236.         ('Status', '_enum'),
  237.         ('Value', '_object'),
  238.         ('OutRefParams', '_oArray'),
  239.         ('Error', 'FppError'),
  240.         ('ProfilingInfo', '_object')]
  241.  
  242.  
  243. class InboxUiData(FppClass):
  244.     _fields_ = [
  245.         ('FolderListHtml', '_string'),
  246.         ('MessageListHtml', '_string'),
  247.         ('MessageHtml', '_string'),
  248.         ('RedirectUrl', '_string')]
  249.  
  250.  
  251. class HmCandidacyInfo(FppClass):
  252.     _fields_ = [
  253.         ('Status', '_enum'),
  254.         ('Guid', '_string'),
  255.         ('ShowMakeLiveContact', '_enum')]
  256.  
  257.  
  258. class HmAuxData(FppClass):
  259.     QueryArgName = 'Aux'
  260.     _fields_ = [
  261.         ('Value', '_string'),
  262.         ('LiveContactCandidacyInfo', 'HmCandidacyInfo')]
  263.  
  264.  
  265. class MessageRenderingInfo(FppClass):
  266.     _fields_ = [
  267.         ('MessageId', '_string'),
  268.         ('FolderId', '_string'),
  269.         ('OpenMessageBody', '_primitive'),
  270.         ('AllowUnsafeContent', '_primitive'),
  271.         ('OverrideCodepage', '_primitive'),
  272.         ('HmAuxData', 'HmAuxData'),
  273.         ('SortKey', '_enum'),
  274.         ('SortAsc', '_primitive'),
  275.         ('Action', '_enum')]
  276.  
  277.  
  278. class MessageRenderingInfoNew(MessageRenderingInfo):
  279.     _fields_ = [
  280.         ('MessageId', '_string'),
  281.         ('FolderId', '_string'),
  282.         ('OpenMessageBody', '_primitive'),
  283.         ('AllowUnsafeContent', '_primitive'),
  284.         ('OverrideCodepage', '_primitive'),
  285.         ('UnknownArgument', '_primitive'),
  286.         ('HmAuxData', 'HmAuxData'),
  287.         ('SortKey', '_enum'),
  288.         ('SortAsc', '_primitive'),
  289.         ('Action', '_enum'),
  290.         ('UnknownArgument2', '_primitive')]
  291.  
  292.  
  293. class MessageListRenderingInfo(FppClass):
  294.     _fields_ = [
  295.         ('FolderId', '_string'),
  296.         ('PageSize', '_primitive'),
  297.         ('PageDirection', '_enum'),
  298.         ('PageSkip', '_primitive'),
  299.         ('SortKey', '_enum'),
  300.         ('SortAsc', '_primitive'),
  301.         ('AnchorMessageId', '_string'),
  302.         ('AnchorMessageDate', '_string'),
  303.         ('PageNumCurrent', '_primitive'),
  304.         ('PageNumMidStart', '_primitive'),
  305.         ('IsSearchResults', '_primitive'),
  306.         ('SearchKeyword', '_string'),
  307.         ('IsRtl', '_primitive'),
  308.         ('MessageCount', '_primitive')]
  309.  
  310.  
  311. class MessageListRenderingInfoNew(MessageListRenderingInfo):
  312.     _fields_ = [
  313.         ('FolderId', '_string'),
  314.         ('PageDirection', '_enum'),
  315.         ('PageSkip', '_primitive'),
  316.         ('SortKey', '_enum'),
  317.         ('SortAsc', '_primitive'),
  318.         ('AnchorMessageId', '_string'),
  319.         ('AnchorMessageDate', '_string'),
  320.         ('PageNumCurrent', '_primitive'),
  321.         ('PageNumMidStart', '_primitive'),
  322.         ('IsSearchResults', '_primitive'),
  323.         ('SearchKeyword', '_string'),
  324.         ('UnknownArgument1', '_primitive'),
  325.         ('UnknownArgument2', '_primitive'),
  326.         ('UnknownArgument3', '_enum')]
  327.  
  328.  
  329. class HmSimpleMsg(FppClass):
  330.     _fields_ = [
  331.         ('IsBlocking', '_primitive'),
  332.         ('YesCode', '_primitive'),
  333.         ('NoCode', '_primitive'),
  334.         ('Message', '_string')]
  335.  
  336.  
  337. class __2(FppClass):
  338.     _fields_ = [
  339.         ('IsBlocking', '_primitive'),
  340.         ('YesCode', '_primitive'),
  341.         ('NoCode', '_primitive'),
  342.         ('Message', '_string')]
  343.  
  344.  
  345. class __5(FppClass):
  346.     _fields_ = [
  347.         ('ExistingContacts', '_array'),
  348.         ('PotentialContacts', '_array'),
  349.         ('HasExistingContacts', '_primitive'),
  350.         ('HasPotentialContacts', '_primitive')]
  351.  
  352.  
  353. class __0(FppClass):
  354.     _fields_ = [
  355.         ('Url', '_string'),
  356.         ('CommandCode', '_primitive'),
  357.         ('Text', '_string')]
  358.  
  359.  
  360. class __1(FppClass):
  361.     _fields_ = [
  362.         ('MessageType', '_enum'),
  363.         ('InfoCode', '_primitive'),
  364.         ('Message', '_string'),
  365.         ('ExtendedMessage', '_string'),
  366.         ('PSValue', '_string')]
  367.  
  368.  
  369. class __3(FppClass):
  370.     _fields_ = [
  371.         ('FileName', '_string'),
  372.         ('FileId', '_string'),
  373.         ('Success', '_primitive'),
  374.         ('ShowMessage', '_primitive'),
  375.         ('ErrorCode', '_primitive')]
  376.  
  377.  
  378. class ABContact(FppClass):
  379.     _fields_ = [
  380.         ('DisplayName', '_string'),
  381.         ('PreferredEmail', '_string'),
  382.         ('ContactType', '_enum'),
  383.         ('PassportName', '_string'),
  384.         ('Guid', '_string'),
  385.         ('IsMessengerUser', '_primitive'),
  386.         ('IsFavorite', '_primitive'),
  387.         ('Cid', '_string'),
  388.         ('Emails', '_array'),
  389.         ('GleamState', '_enum')]
  390.  
  391.  
  392. class ABDetailedContact(FppClass):
  393.     _fields_ = [
  394.         ('ContactType', '_enum'),
  395.         ('FirstName', '_string'),
  396.         ('LastName', '_string'),
  397.         ('PassportName', '_string'),
  398.         ('NickName', '_string'),
  399.         ('Comment', '_string'),
  400.         ('IsMessengerUser', '_primitive'),
  401.         ('IsSmtpContact', '_primitive'),
  402.         ('IsFavorite', '_primitive'),
  403.         ('Emails', '_array'),
  404.         ('Phones', '_array'),
  405.         ('Locations', '_array'),
  406.         ('WebSites', '_array'),
  407.         ('Dates', '_array'),
  408.         ('Guid', '_string'),
  409.         ('Cid', '_string')]
  410.  
  411.  
  412. class ABGroup(FppClass):
  413.     _fields_ = [
  414.         ('Guid', '_string'),
  415.         ('QuickName', '_string')]
  416.  
  417.  
  418. class ABDetailedGroup(FppClass):
  419.     _fields_ = [
  420.         ('Guid', '_string'),
  421.         ('QuickName', '_string'),
  422.         ('Count', '_primitive')]
  423.  
  424.  
  425. class __4(FppClass):
  426.     _fields_ = [
  427.         ('Groups', '_array'),
  428.         ('Contacts', '_array'),
  429.         ('FileAs', '_enum'),
  430.         ('SelectedGuid', '_string'),
  431.         ('SelectedGroup', 'ABDetailedGroup'),
  432.         ('SelectedContact', 'ABDetailedContact'),
  433.         ('HasSelectedGuid', '_primitive'),
  434.         ('HasSelectedGroup', '_primitive')]
  435.  
  436.  
  437. class ABEmail(FppClass):
  438.     _fields_ = [
  439.         ('Type', '_enum'),
  440.         ('Email', '_string')]
  441.  
  442.  
  443. class ABPhone(FppClass):
  444.     _fields_ = [
  445.         ('Type', '_enum'),
  446.         ('Phone', '_string')]
  447.  
  448.  
  449. class ABLocation(FppClass):
  450.     _fields_ = [
  451.         ('Name', '_string'),
  452.         ('Street', '_string'),
  453.         ('City', '_string'),
  454.         ('State', '_string'),
  455.         ('Country', '_string'),
  456.         ('PostalCode', '_string')]
  457.  
  458.  
  459. class ABDate(FppClass):
  460.     _fields_ = [
  461.         ('Day', '_string'),
  462.         ('Month', '_string')]
  463.  
  464.  
  465. class ABWebSite(FppClass):
  466.     _fields_ = []
  467.  
  468.  
  469. class __6(FppClass):
  470.     _fields_ = [
  471.         ('MailboxSize', '_string'),
  472.         ('MailboxQuota', '_string')]
  473.  
  474.  
  475. class __7(FppClass):
  476.     _fields_ = [
  477.         ('FolderId', '_string'),
  478.         ('Name', '_string'),
  479.         ('Icon', '_string'),
  480.         ('UnreadMessagesCount', '_primitive'),
  481.         ('TotalMessagesCount', '_primitive'),
  482.         ('Size', '_string'),
  483.         ('IsSystem', '_primitive'),
  484.         ('IsHidden', '_primitive'),
  485.         ('FolderType', '_enum'),
  486.         ('SystemFolderType', '_enum')]
  487.  
  488.  
  489. class __8(FppClass):
  490.     _fields_ = [
  491.         ('Name', '_string'),
  492.         ('Address', '_string'),
  493.         ('EncodedName', '_string')]
  494.  
  495.  
  496. class __9(FppClass):
  497.     _fields_ = [
  498.         ('Name', '_string')]
  499.  
  500.  
  501. class __10(FppClass):
  502.     _fields_ = [
  503.         ('SenderIDResult', '_enum'),
  504.         ('SenderEmail', '__8'),
  505.         ('IsKnownSender', '_primitive'),
  506.         ('ListUnsubscribeEmail', '_string'),
  507.         ('IsSenderInContactList', '_primitive')]
  508.  
  509.  
  510. class __12(FppClass):
  511.     _fields_ = [
  512.         ('DidSenderIDPass', '_primitive'),
  513.         ('DidSenderIDFail', '_primitive'),
  514.         ('IsBlockAvailableInBL', '_primitive'),
  515.         ('IsSameDomainInBL', '_primitive'),
  516.         ('IsSafeListDomain', '_primitive'),
  517.         ('IsMailingList', '_primitive'),
  518.         ('IsSenderHeaderPresent', '_primitive'),
  519.         ('IsListUnsubscribePresent', '_primitive'),
  520.         ('IsListUnsubscribeInEmailFormat', '_primitive'),
  521.         ('HasReachedMaxFilterLimit', '_primitive'),
  522.         ('IsNeverAllowOrBlockDomain', '_primitive'),
  523.         ('IsBlockSenderException', '_primitive')]
  524.  
  525.  
  526. class __13(FppClass):
  527.     _fields_ = [
  528.         ('IsFromPRAOnBlockList', '_primitive'),
  529.         ('HasReachedSafeListLimit', '_primitive'),
  530.         ('HasEntriesFromSameDomainInSafeList', '_primitive'),
  531.         ('IsDomainSafe', '_primitive'),
  532.         ('IsSingleToAndNotRecipient', '_primitive'),
  533.         ('HasFilterToJunkToAddress', '_primitive'),
  534.         ('IsRecipientAddressRFCCompliant', '_primitive'),
  535.         ('HasReachedMailingListLimit', '_primitive'),
  536.         ('IsNeverAllowOrBlockDomain', '_primitive'),
  537.         ('IsInContacts', '_primitive')]
  538.  
  539.  
  540. class __14(FppClass):
  541.     _fields_ = [
  542.         ('Action', '_enum'),
  543.         ('Reason', '_string'),
  544.         ('CalendarEventUrl', '_string'),
  545.         ('Subject', '_string'),
  546.         ('To', '_string'),
  547.         ('Where', '_string'),
  548.         ('When', '_string')]
  549.  
  550.  
  551. class __16(FppClass):
  552.     _fields_ = [
  553.         ('Header', '__22'),
  554.         ('Body', '_string'),
  555.         ('Attachments', '_array'),
  556.         ('ToLineString', '_string'),
  557.         ('CCLineString', '_string'),
  558.         ('BccLineString', '_string'),
  559.         ('Rfc822References', '_string'),
  560.         ('Rfc822MessageId', '_string'),
  561.         ('Rfc822InReplyTo', '_string'),
  562.         ('DateSentLocal', '_string'),
  563.         ('DateReceivedLocal', '_string'),
  564.         ('SafetyLevel', '_enum'),
  565.         ('MailSenderInfo', '__10'),
  566.         ('MeetingResponseInfo', '__14'),
  567.         ('MeetingIcalId', '_string'),
  568.         ('ReplyFromAddress', '_string'),
  569.         ('HasPhishingLinks', '_primitive'),
  570.         ('IsVerifiedMail', '_primitive'),
  571.         ('AllowUnsafeContentOverride', '_primitive'),
  572.         ('UnsafeContentFiltered', '_primitive'),
  573.         ('UnsafeImagesFiltered', '_primitive'),
  574.         ('DetectedCodePages', '_array'),
  575.         ('CurrentCodePage', '_primitive'),
  576.         ('DraftId', '_string')]
  577.  
  578.  
  579. class __17(FppClass):
  580.     _fields_ = [
  581.         ('ContentType', '_string'),
  582.         ('Name', '_string'),
  583.         ('Size', '_string'),
  584.         ('BodyIndex', '_primitive'),
  585.         ('AttachmentIndex', '_primitive'),
  586.         ('ForwardId', '_string')]
  587.  
  588.  
  589. class __18(FppClass):
  590.     _fields_ = [
  591.         ('EOF', '_primitive')]
  592.  
  593.  
  594. class __19(FppClass):
  595.     _fields_ = [
  596.         ('Prefix', '_string'),
  597.         ('Text', '_string')]
  598.  
  599.  
  600. class __21(FppClass):
  601.     _fields_ = [
  602.         ('MessageId', '_string'),
  603.         ('IsRead', '_primitive'),
  604.         ('TimeStamp', '_string'),
  605.         ('IsDraft', '_primitive'),
  606.         ('CP', '_primitive'),
  607.         ('AllowUnsafeContent', '_primitive'),
  608.         ('IsVoicemail', '_primitive'),
  609.         ('IsCalllog', '_primitive'),
  610.         ('IsPrivateVoicemail', '_primitive'),
  611.         ('IsMeetingReq', '_primitive')]
  612.  
  613.  
  614. class __22(FppClass):
  615.     _fields_ = [
  616.         ('AuxData', 'HmAuxData'),
  617.         ('MessageId', '_string'),
  618.         ('OriginalMessageId', '_string'),
  619.         ('FolderId', '_string'),
  620.         ('ExtendedType', '_enum'),
  621.         ('TypeData', '_enum'),
  622.         ('IsRead', '_primitive'),
  623.         ('PopSettingIndex', '_primitive'),
  624.         ('OriginalReplyState', '_enum'),
  625.         ('IsInWhiteList', '_primitive'),
  626.         ('SentState', '_enum'),
  627.         ('MessageSize', '_string'),
  628.         ('HasAttachments', '_primitive'),
  629.         ('From', '__8'),
  630.         ('Subject', '__19'),
  631.         ('DateReceivedUTC', '_date'),
  632.         ('DateReceived', '_date'),
  633.         ('Importance', '_enum'),
  634.         ('IsDraft', '_primitive'),
  635.         ('Marker', '__18'),
  636.         ('MessageSizeString', '_string'),
  637.         ('DateReceivedLocal', '_string'),
  638.         ('TimeStamp', '_string')]
  639.  
  640.  
  641. class BootstrapSeed(FppClass):
  642.     _fields_ = [
  643.         ('Mode', '_enum'),
  644.         ('FolderId', '_string'),
  645.         ('messageId', '_string'),
  646.         ('count', '_primitive'),
  647.         ('ascendingOrder', '_primitive'),
  648.         ('pageSize', '_primitive'),
  649.         ('totalMessages', '_primitive'),
  650.         ('renderHtml', '_primitive'),
  651.         ('returnHeaders', '_primitive'),
  652.         ('sortBy', '_enum')]
  653.  
  654.  
  655. class __23(FppClass):
  656.     _fields_ = [
  657.         ('User', '_string'),
  658.         ('UserName', '_string'),
  659.         ('Timestamp', '_string'),
  660.         ('Configuration', '__26'),
  661.         ('Folders', '_array'),
  662.         ('MessageInfo', '__24'),
  663.         ('TodayPage', '_string')]
  664.  
  665.  
  666. class __24(FppClass):
  667.     _fields_ = [
  668.         ('MessageListHtml', '_string'),
  669.         ('Headers', '_array'),
  670.         ('HeaderTags', '_array'),
  671.         ('MessageHtml', '_string'),
  672.         ('SelectedFolderId', '_string'),
  673.         ('SelectedMessageIndex', '_primitive'),
  674.         ('IsPlainText', '_primitive'),
  675.         ('OverrideCodePage', '_primitive'),
  676.         ('AllowUnsafeContent', '_primitive')]
  677.  
  678.  
  679. class __25(FppClass):
  680.     _fields_ = [
  681.         ('Signature', '_string'),
  682.         ('FromAddresses', '_array')]
  683.  
  684.  
  685. class __26(FppClass):
  686.     _fields_ = [
  687.         ('DefaultMsgsInListView', '_primitive'),
  688.         ('KeyboardPressesDelay', '_primitive'),
  689.         ('CachePagesOfMessageHeaders', '_primitive'),
  690.         ('EnableReadingPane', '_primitive'),
  691.         ('HasAcceptedJunkReporting', '_primitive'),
  692.         ('JunkReportingUISeen', '_primitive'),
  693.         ('DefaultContactsInListview', '_primitive'),
  694.         ('SpacesContactBindingEnabled', '_primitive'),
  695.         ('DoSpellCheckAsYouType', '_primitive'),
  696.         ('SpellCheckEnabledInLocale', '_primitive'),
  697.         ('ReadingPaneConfiguration', '_enum'),
  698.         ('AutoSelectMessage', '_primitive'),
  699.         ('MinimumIntervalBetweenSpellChecks', '_primitive'),
  700.         ('UserThemeID', '_primitive'),
  701.         ('SaveSentMessages', '_primitive'),
  702.         ('BalloonTipsEnabled', '_primitive'),
  703.         ('BalloonTipUserPreference', '_primitive'),
  704.         ('IsBigInbox', '_primitive'),
  705.         ('IsAdsDown', '_primitive'),
  706.         ('ForwardingOn', '_primitive')]
  707.  
  708.  
  709. class __27(FppClass):
  710.     _fields_ = [
  711.         ('ErrorCode', '_string'),
  712.         ('Folders', '_array'),
  713.         ('Headers', '_array')]
  714.  
  715.  
  716. class FppProxy(object):
  717.     
  718.     def escape(b):
  719.         if b is None:
  720.             return b
  721.         
  722.         a = ''
  723.         
  724.         def slash_escape(m):
  725.             return '\\' + m.group(0)
  726.  
  727.         a = ''.join([
  728.             '"',
  729.             str(b),
  730.             '"'])
  731.         a = re.sub('([\\{|\\}\\[|\\]\\,\\\\:])', slash_escape, a).encode('url')
  732.         return a
  733.  
  734.     escape = staticmethod(escape)
  735.     
  736.     def objToStringImpl(a):
  737.         b = []
  738.         t = type(a)
  739.         if t is unicode:
  740.             a = a.encode('utf-8')
  741.             t = str
  742.         
  743.         if a is None:
  744.             return 'null'
  745.         elif t is str:
  746.             return FppProxy.escape(a)
  747.         elif t is list:
  748.             return FppProxy.arrayToString(a)
  749.         elif t is dict and hasattr(a, 'toString') or getattr(a, '_isFppObject', False):
  750.             return a.toString()
  751.         else:
  752.             return FppProxy.objToString(a)
  753.  
  754.     objToStringImpl = staticmethod(objToStringImpl)
  755.     
  756.     def arrayToString(a):
  757.         res = [
  758.             '[']
  759.         for x in a:
  760.             res.append(FppProxy.objToStringImpl(x))
  761.             res.append(',')
  762.         
  763.         if a:
  764.             res.pop()
  765.         
  766.         res.append(']')
  767.         return ''.join(res)
  768.  
  769.     arrayToString = staticmethod(arrayToString)
  770.     
  771.     def objToString(c):
  772.         if c is None:
  773.             return 'null'
  774.         
  775.         a = [
  776.             '{']
  777.         for name, typ in getattr(c, '_fields_'):
  778.             a.append(FppProxy.objToStringImpl(getattr(c, name)))
  779.             a.append(',')
  780.         
  781.         a[-1] = '}'
  782.         return ''.join(a)
  783.  
  784.     objToString = staticmethod(objToString)
  785.     
  786.     def registerFppMethod(self, name, params, mn, tm, g, ns):
  787.         args = [ x.name for x in params ]
  788.         args.extend(('cb', 'ctx', 'cbError'))
  789.         args_str = ', '.join(args)
  790.         dynamic = [
  791.             'def %s(%s):\n' % (name, args_str)]
  792.         
  793.         def fppmethod(*args):
  794.             vals = dict(zip((lambda .0: for p in .0:
  795. p.name)(params), args))
  796.             cb = None
  797.             ctx = None
  798.             cbError = None
  799.             for remaining in args[len(vals):]:
  800.                 if cb is None:
  801.                     cb = remaining
  802.                     continue
  803.                 
  804.                 if ctx is None:
  805.                     ctx = remaining
  806.                     continue
  807.                 
  808.                 if cbError is None:
  809.                     cbError = remaining
  810.                     continue
  811.                     continue
  812.             
  813.             f = self.Network.createFppMethod(ns, mn, cb, cbError)
  814.             for param in params:
  815.                 f.addParameter(param.type, vals[param.name])
  816.             
  817.             f.invoke(ctx)
  818.  
  819.         fppmethod.__name__ == name
  820.         setattr(self, name, fppmethod)
  821.  
  822.  
  823.  
  824. class Network_Type(object):
  825.     configuration = None
  826.     
  827.     def __init__(self, b, opener = None):
  828.         self._isIE = False
  829.         self._isMoz = True
  830.         self._requests = []
  831.         self.configuration = b
  832.         self.opener = opener
  833.  
  834.     
  835.     def set_base_url(self, baseurl):
  836.         self.base_url = baseurl
  837.  
  838.     
  839.     def createFppMethod(self, className, methodName, cb, cbError):
  840.         a = getattr(self, '_fppPrevious', None)
  841.         if a is not None and a._request is not None:
  842.             a._request.abort()
  843.         
  844.         fm = FppMethod(className, methodName, cb, cbError)
  845.         fm.Network = self
  846.         self._fppPrevious = fm
  847.         return fm
  848.  
  849.     
  850.     def createRequest(self, url, callback, verb):
  851.         return HM_Request(url, callback, self, self.opener, verb)
  852.  
  853.     
  854.     def process_response(self, resp, callback):
  855.         data = resp.read()
  856.         log.info('Processing hotmail response: %r', data)
  857.         if resp.code // 100 != 2:
  858.             e = Exception('%r was not successful (code = %r)', resp, resp.code)
  859.             log.info('%r', e)
  860.             return callback.error(e)
  861.         
  862.         match = re.search('new HM\\.FppReturnPackage\\((\\S+?),', data)
  863.         if match is None:
  864.             e = Exception('Response has unknown status code: %r', data)
  865.             log.info('%r', e)
  866.             return callback.error(e)
  867.         
  868.         status = match.group(1)
  869.         log.info('Got status code %r for hotmail request. data was: %r', status, data)
  870.         
  871.         try:
  872.             status = int(status)
  873.         except (ValueError, TypeError):
  874.             e = Exception("Status code could not be int()'d. it was %r (the whole response was %r)", status, data)
  875.             log.info('%r', e)
  876.             return callback.error(e)
  877.  
  878.         if status != 0:
  879.             e = Exception("Got a non-zero status code (%r). Here's the whole response: %r", status, data)
  880.             log.info('%r', e)
  881.             return callback.error(e)
  882.         
  883.         return callback.success(data)
  884.  
  885.     process_response = util.callsback(process_response)
  886.  
  887.  
  888. class HM_Request(object):
  889.     
  890.     def __init__(self, url, cb, network, opener, verb = None):
  891.         self.url = url
  892.         self.callback = cb
  893.         if not verb:
  894.             pass
  895.         self.verb = 'GET'
  896.         self.postString = None
  897.         self.context = None
  898.         self.headers = { }
  899.         self.opener = opener
  900.         self.network = network
  901.  
  902.     
  903.     def send(self, context):
  904.         self.context = context
  905.         r = asynchttp.HTTPRequest(self.url, self.postString, self.headers, method = self.verb)
  906.         cbargs = dict(success = self.on_response, error = self.on_error)
  907.         if self.opener is None:
  908.             asynchttp.httpopen(r, **cbargs)
  909.         else:
  910.             (None, util.threaded)((lambda : self.opener.open(r)))(**cbargs)
  911.  
  912.     
  913.     def on_response(self, resp = None):
  914.         self.network.process_response(resp, callback = self.callback)
  915.         self.abort()
  916.  
  917.     
  918.     def on_error(self, e = None):
  919.         self.callback.error(e)
  920.         self.abort()
  921.  
  922.     
  923.     def abort(self):
  924.         self.__dict__.clear()
  925.         self.__getattr__ = Null
  926.  
  927.  
  928.  
  929. class FPPConfig(object):
  930.     RequestHandler = 'mail.fpp'
  931.     FppVersion = '1'
  932.     SessionId = ''
  933.     AuthUser = ''
  934.     CanaryToken = 'mt'
  935.     Version = '1'
  936.     PartnerID = ''
  937.     
  938.     def __init__(self, hotmail):
  939.         self.hotmail = hotmail
  940.  
  941.     
  942.     def CanaryValue(self):
  943.         if self.hotmail is None:
  944.             return None
  945.         
  946.         return self.hotmail.get_cookie(self.CanaryToken, domain = '.mail.live.com')
  947.  
  948.     CanaryValue = property(CanaryValue)
  949.  
  950.  
  951. class PageInfo(object):
  952.     fppCfg = None
  953.     SELF_PATH = '/mail/InboxLight.aspx'
  954.     queryString = {
  955.         'nonce': '2122195423' }
  956.  
  957.  
  958. class FppMethod(object):
  959.     _HTTP_HEADERS = {
  960.         'X-FPP-Command': '0',
  961.         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }
  962.     
  963.     def __init__(self, className, methodName, cb, cbError):
  964.         self.className = className
  965.         self.methodName = methodName
  966.         self.callback = cb
  967.         self.callbackError = cbError
  968.         self.context = None
  969.         self._request = None
  970.         self._isInvoked = False
  971.         self._params = []
  972.  
  973.     
  974.     def addParameter(self, a, b):
  975.         self._params.append({
  976.             'fppType': a,
  977.             'value': b })
  978.  
  979.     
  980.     def invoke(self, context):
  981.         self.context = context
  982.         if not self.Network.configuration:
  983.             raise Exception('Network is not configured')
  984.         
  985.         if self._isInvoked:
  986.             raise Exception('FppMethod %r already used', self)
  987.         
  988.         self._isInvoked = True
  989.         h = None
  990.         i = None
  991.         l = None
  992.         g = ''
  993.         a = self.Network.configuration
  994.         e = self._params
  995.         f = len(e)
  996.         if f > 0:
  997.             d = []
  998.             j = TypeSystem.escape
  999.             print e
  1000.             for c in e:
  1001.                 d.append(j({
  1002.                     'type': c['fppType'],
  1003.                     'value': c['value'] }))
  1004.                 d.append(',')
  1005.             
  1006.             g = ''.join(d[:-1])
  1007.         
  1008.         if not a.PartnerID:
  1009.             pass
  1010.         i = ''.join((util.httpjoin(self.Network.base_url, a.RequestHandler), '?cnmn=', self.className, '.', self.methodName, '&a=', a.SessionId.encode('url'), '&au=', a.AuthUser, '&ptid=', '0'))
  1011.         h = ''.join(map(str, ('cn=', self.className, '&mn=', self.methodName, '&d=', g, '&v=', a.FppVersion, '&', a.CanaryToken, '=', a.CanaryValue)))
  1012.         
  1013.         def clear_request(resp):
  1014.             self._request = None
  1015.             self._isInvoked = False
  1016.  
  1017.         self.callback.error.append(clear_request)
  1018.         self.callback.success.append(clear_request)
  1019.         b.headers = self._HTTP_HEADERS
  1020.         b.postString = h
  1021.         b.send(self)
  1022.         del self.Network
  1023.  
  1024.  
  1025.  
  1026. class HM_Type(FppProxy):
  1027.     namespace = 'HM'
  1028.     SortBy = FlagsCreate('Sender', 0, 'Subject', 1, 'Size', 2, 'Type', 3, 'Date', 4)
  1029.     FppStatus = FlagsCreate('SUCCESS', 0, 'ERR_HTTP_MISCONFIGURATION', -7, 'ERR_HTTP_PARSE_FAILURE', -6, 'ERR_HTTP_CONNECT_FAILURE', -5, 'ERR_HTTP_TIMEOUT', -4, 'ERR_SERVER_UNCAUGHT', -3, 'ERR_APP_SPECIFIC', -2, 'ERR_FPP_PROTOCOL', -1)
  1030.     ListNavigateDirection = FlagsCreate('FirstPage', 0, 'LastPage', 1, 'NextPage', 2, 'PreviousPage', 3, 'CurrentPage', 4)
  1031.     JmrType = FlagsCreate('Junk', 0, 'NotJunk', 1, 'AV', 2, 'SVMOptInOptOut', 3, 'SVMClassification', 4, 'Phish', 5, 'Unsubscribe', 6, 'Unknown', -1)
  1032.     ReadMessageOperation = FlagsCreate('GetMessage', 0, 'NextMessage', 1, 'PreviousMessage', 2, 'MarkAsNotJunk', 3, 'Unsubscribe', 4, 'AddContact', 5, 'None', 6)
  1033.     __11 = FlagsCreate('Passed', 0, 'Failed', 1, 'Unknown', 2, 'SoftFail', 3)
  1034.     __15 = FlagsCreate('Ok', 0, 'OverQuota', 1, 'DoesntExist', 2, 'Error', 3, 'AccountDoesntExist', 4, 'AccountError', 5)
  1035.     __20 = FlagsCreate('Unknown', 0, 'MakeLiveContact', 1, 'AddLiveContact', 2, 'DontShow', 3)
  1036.     
  1037.     def __init__(self, network):
  1038.         self.Network = network
  1039.         self._init_methods()
  1040.  
  1041.     
  1042.     def set_base_url(self, hostname):
  1043.         self.base_url = 'http://%s/mail/' % hostname
  1044.         self.Network.set_base_url(self.base_url)
  1045.  
  1046.     
  1047.     def _init_methods(self):
  1048.         self.registerFppMethod('GetInboxData', [
  1049.             _primitive('fetchFolderList'),
  1050.             _primitive('fetchMessageList'),
  1051.             _custom('messageListRenderingInfo'),
  1052.             _primitive('fetchMessage'),
  1053.             _custom('messageRenderingInfo')], 'GetInboxData', XMLPost, 'abortable', 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1054.         self.registerFppMethod('ClearFolder', [
  1055.             _string('clearFolderId'),
  1056.             _custom('messageListRenderingInfo')], 'ClearFolder', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1057.         self.registerFppMethod('MoveMessagesToFolder', [
  1058.             _string('fromFolderId'),
  1059.             _string('toFolderId'),
  1060.             _array('messageList'),
  1061.             _array('messageAuxData'),
  1062.             _custom('messageListRenderingInfo'),
  1063.             _custom('messageRenderingInfo')], 'MoveMessagesToFolder', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1064.         self.registerFppMethod('MoveMessagesToFolderNew', [
  1065.             _string('fromFolderId'),
  1066.             _string('toFolderId'),
  1067.             _array('messageList'),
  1068.             _array('messageAuxData'),
  1069.             _custom('messageListRenderingInfo')], 'MoveMessagesToFolder', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1070.         self.registerFppMethod('MarkMessagesForJmr', [
  1071.             _string('folderId'),
  1072.             _array('messages'),
  1073.             _array('auxData'),
  1074.             _enum('jmrType'),
  1075.             _primitive('reportToJunk'),
  1076.             _custom('messageListRenderingInfo'),
  1077.             _custom('messageRenderingInfo')], 'MarkMessagesForJmr', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1078.         self.registerFppMethod('ReportError', [
  1079.             _string('message')], 'ReportError', XMLPost, 'abortable', 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1080.         self.registerFppMethod('AddContactFromMessage', [
  1081.             _custom('messageRenderingInfo'),
  1082.             _string('contactName'),
  1083.             _string('contactEmail')], 'AddContactFromMessage', XMLPost, 'abortable', 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1084.         self.registerFppMethod('SvmFeedback', [
  1085.             _string('svmUrl'),
  1086.             _custom('messageRenderingInfo'),
  1087.             _custom('messageListRenderingInfo')], 'SvmFeedback', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1088.         self.registerFppMethod('MarkMessagesReadState', [
  1089.             _primitive('readState'),
  1090.             _array('messages'),
  1091.             _custom('messageListRenderingInfo')], 'MarkMessagesReadState', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1092.         self.registerFppMethod('SendMessage_ec', [
  1093.             _string('to'),
  1094.             _string('from'),
  1095.             _string('cc'),
  1096.             _string('bcc'),
  1097.             _enum('priority'),
  1098.             _string('subject'),
  1099.             _string('message'),
  1100.             _array('attachments'),
  1101.             _string('draftId'),
  1102.             _string('draftFolderId'),
  1103.             _string('originalMessageId'),
  1104.             _string('rfc822MessageId'),
  1105.             _string('rfc822References'),
  1106.             _string('rfc822InReplyTo'),
  1107.             _enum('sentState'),
  1108.             _primitive('sendByPlainTextFormat'),
  1109.             _array('ignoredWordsFromSpellCheck'),
  1110.             _string('hipAnswer'),
  1111.             _string('hipMode'),
  1112.             _string('meetingIcalId')], 'SendMessage_ec', XMLPost, null, 'Microsoft.Msn.Hotmail.Ui.Fpp.MailBox')
  1113.  
  1114.  
  1115.  
  1116. def doAction(actionName, f):
  1117.     a = InboxPage.getSelectedMessageData(true)
  1118.     if actionName == 'MarkAsJunk':
  1119.         MarkAsJunk(a.mids, a.mads, InboxPage.folderList.fid)
  1120.     elif actionName == 'DeleteMessages':
  1121.         Messages_remove(a.mids, a.mads)
  1122.     
  1123.  
  1124.  
  1125. def Messages_remove(messageList, messageAuxData):
  1126.     Messages_move(messageList, messageAuxData, InboxPage.folderList.fid, App.config.sysFldrs.trashFid)
  1127.  
  1128.  
  1129. def Messages_move(messageList, messageAuxData, fromFolderId, toFolderId):
  1130.     messageListRenderingInfo = InboxPage.createMessageListRenderingInfo(true)
  1131.     messageRenderingInfo = None if InboxPage.isReadMessageMode else null
  1132.     HM.MoveMessagesToFolder(fromFolderId, toFolderId, messageList, messageAuxData, messageListRenderingInfo, messageRenderingInfo, InboxServices__endUpdateUi)
  1133.  
  1134.  
  1135. def MarkAsJunk(messageIds, messageAuxData, folderid):
  1136.     messageListRenderingInfo = InboxPage.createMessageListRenderingInfo(true)
  1137.     messageRenderingInfo = None if InboxPage.isReadMessageMode else null
  1138.     HM.MarkMessagesForJmr(messageIds, messageAuxData, folderId, App.config.allowReporting, HM.JmrType.Junk, messageListRenderingInfo, messageRenderingInfo, InboxServices._endSetJunkStatus, {
  1139.         'jmrType': a })
  1140.  
  1141.  
  1142. def InboxPage_getSelectedMessageData(b):
  1143.     if InboxPage.isReadMessageMode:
  1144.         d = [
  1145.             InboxPage.readingPane.mid]
  1146.         e = HM.HmAuxData(Value = a)
  1147.         c = [
  1148.             e]
  1149.         return {
  1150.             'mids': d,
  1151.             'mads': c }
  1152.     
  1153.     a = InboxPage.messageList.getSelectedMessageData()
  1154.     if b and 0 == a.mids.length:
  1155.         alert(compatibleDecode(Res.strings.noMessagesSelected))
  1156.     
  1157.     return a
  1158.  
  1159.  
  1160. def get_classname(js):
  1161.     return re.search('HM\\.registerFppClass\\("(.+?)",', js).group(1)
  1162.  
  1163.  
  1164. def get_fields(js):
  1165.     fields_re = re.compile('Web\\.Network\\.FppProxy\\._(_(?:.+?))\\("(.+?)"\\),')
  1166.     return [ x[::-1] for x in fields_re.findall(js) ]
  1167.  
  1168.  
  1169. def fppclass_to_python(js):
  1170.     pformat = pformat
  1171.     import pprint
  1172.     cname = get_classname(js)
  1173.     fields = get_fields(js)
  1174.     return 'class %s(FppClass):\n    _fields_ = %s\n' % (cname, pformat(fields))
  1175.  
  1176.  
  1177. def main():
  1178.     print str(HmAuxData('10\\|0\\|8CA6DDB632DFE40\\|', null))
  1179.  
  1180.  
  1181. def main2():
  1182.     testapp = testapp
  1183.     import tests.testapp
  1184.     a = testapp()
  1185.     Page = PageInfo()
  1186.     Page.fppCfg = FPPConfig(None)
  1187.     Network = Network_Type(Page.fppCfg)
  1188.     HM = HM_Type(Network)
  1189.     
  1190.     def doit(callback = (None,)):
  1191.         HM.GetInboxData(True, True, None, True, None, Null, None, None)
  1192.  
  1193.     doit = util.callsback(doit)
  1194.     
  1195.     def success(resp):
  1196.         print 'success', resp
  1197.  
  1198.     
  1199.     def error(e):
  1200.         print 'error', e
  1201.  
  1202.     doit(success = success, error = error)
  1203.  
  1204. if __name__ == '__main__':
  1205.     main()
  1206.  
  1207.